/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedBeans;

import controladores.ConsultarReservaCont;
import controladores.GestionHabitacionCont;
import controladores.ModificarReservaCont;
import controladores.SolicitarReservaCont;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import modelos.pojos.Habitacion;
import org.apache.log4j.Logger;
import org.primefaces.component.datatable.DataTable;
import org.primefaces.component.inputtext.InputText;

/**
 *
 * @author ricardo
 */
@ManagedBean
@ViewScoped
public class ReservaHabitacion implements Serializable {

    private modelos.pojos.ReservaHabitacion reservaHabitacion;
    private String codigoReservaPadre;
    protected Logger log = Logger.getLogger(ReservaHabitacion.class);
    private DataTable tablaReservas;
    private boolean noPermitirEdicion = true;

    /** Creates a new instance of ReservaHabitacion */
    public ReservaHabitacion() {
        reservaHabitacion = new modelos.pojos.ReservaHabitacion();
    }

    public modelos.pojos.ReservaHabitacion getReservaHabitacion() {
        return reservaHabitacion;
    }

    public void setReservaHabitacion(modelos.pojos.ReservaHabitacion reservaHabitacion) {
        this.reservaHabitacion = reservaHabitacion;
    }

    public DataTable getTablaReservas() {
        return tablaReservas;
    }

    public void setTablaReservas(DataTable tablaReservas) {
        this.tablaReservas = tablaReservas;
    }

    public boolean isNoPermitirEdicion() {
        return noPermitirEdicion;
    }

    public void setNoPermitirEdicion(boolean noPermitirEdicion) {
        this.noPermitirEdicion = noPermitirEdicion;
    }

    public void desbloquear() {
        this.noPermitirEdicion = false;
        modelos.pojos.ReservaHabitacion seleccion = (modelos.pojos.ReservaHabitacion) tablaReservas.getRowData();
        reservaHabitacion = seleccion;
    }

    public void crearReservaHabitacion() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        UIViewRoot root = facesContext.getViewRoot();
        InputText caja = (InputText) root.findComponent("este").findComponent("codReserva");
        codigoReservaPadre = caja.getValue().toString();
        String mensaje = SolicitarReservaCont.validarInformacionReservaHabitacion(reservaHabitacion.getFechaProgIn(), reservaHabitacion.getFechaProgOut());
        if (mensaje == null) {
            //List<modelos.pojos.Habitacion> disponibles = GestionHabitacionCont.listarHabitacionesDisponibles(reservaHabitacion.getHabitacion().getDistribucion());
            List<modelos.pojos.Habitacion> disponibles = GestionHabitacionCont.listarHabitacionesDisponiblesPorRango(reservaHabitacion.getHabitacion().getDistribucion(), reservaHabitacion.getFechaProgIn(), reservaHabitacion.getFechaProgOut());
            if (disponibles != null) {
                reservaHabitacion.setHabitacion(disponibles.get(0));
                SolicitarReservaCont.crearReservaHabitacion(reservaHabitacion, codigoReservaPadre);
            }
        } else {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error!", mensaje));
        }
    }

    public void consultarReservaHabitacion() {
        modelos.pojos.ReservaHabitacion seleccion = (modelos.pojos.ReservaHabitacion) tablaReservas.getRowData();
        reservaHabitacion = ConsultarReservaCont.consultarReservaHabitacion(seleccion.getReserva().getCodigoReserva(), seleccion.getHabitacion().getNumero());
    }

    public List<modelos.pojos.ReservaHabitacion> listarReservasHabitacion() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        UIViewRoot root = facesContext.getViewRoot();
        InputText caja = (InputText) root.findComponent("este").findComponent("codReserva");
        codigoReservaPadre = caja.getValue().toString();
        return ConsultarReservaCont.consultarReservasHabitacion(codigoReservaPadre);
    }

    public void actualizarReservaHabitacion() {
        String mensaje = SolicitarReservaCont.validarInformacionReservaHabitacion(reservaHabitacion.getFechaProgIn(), reservaHabitacion.getFechaProgOut());
        if (mensaje == null) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            UIViewRoot root = facesContext.getViewRoot();
            InputText caja = (InputText) root.findComponent("display").findComponent("nuevaHab");
            String numeroHabitacionNueva = caja.getValue() + "";
            if (numeroHabitacionNueva.equals("")) {
            } else {
                Habitacion nuevaHab = GestionHabitacionCont.buscarHabitacion(numeroHabitacionNueva);
                if (nuevaHab != null) {
                    reservaHabitacion.setHabitacion(nuevaHab);
                } else {
                    FacesContext context = FacesContext.getCurrentInstance();
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error!", "No existe Habitación especificada"));
                }
            }
            ModificarReservaCont.actualizarReservaHabitaciones(reservaHabitacion);
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Reserva Modificada!"));

        } else {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error!", mensaje));
        }
    }

    public void cancelarReservaHabitacion() {
        modelos.pojos.ReservaHabitacion seleccion = (modelos.pojos.ReservaHabitacion) tablaReservas.getRowData();
        ModificarReservaCont.cancelarReservaHabitacion(seleccion);
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Reserva Cancelada!"));
    }
}
